﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using Excepciones;
using DAO;

namespace Negocio
{
    public class ReglaBase
    {
        public enum Operacion
        {
            INSERT, DELETE, UPDATE, SELECT, SELECTALL
        }

        private EntidadBase entidad;
        private DAOBase daoBase;
        private Operacion oper;

        public ReglaBase(EntidadBase entidad, DAOBase daoBase, Operacion oper)
        {
            this.entidad = entidad;
            this.daoBase = daoBase;
            this.oper = oper;
        }

        public int execute()
        {
            int id = 0;
            if (this.Validar())
            {
                //UPDATE, SELECT Y SELECTALL REVISAR IMPLEMENTACION
                switch (oper)
                {
                    case(Operacion.INSERT):
                        id = daoBase.crear(this.entidad); break;
                    case(Operacion.DELETE):
                        daoBase.eliminar(this.entidad); break;
                    case(Operacion.UPDATE):
                        daoBase.actualizar(this.entidad); break;
                    case(Operacion.SELECT):
                        break;
                    case(Operacion.SELECTALL):
                        daoBase.leerTodas(); break;
                }
            }
            else
            {
                throw new InvalidEntityException("La Entidad cargada no es Valida.");
            }

            return id;
        }

        private bool Validar()
        {
            if (entidad == null)
            {
                return false;
            }

            if (!entidad.esEntidadValida())
            {
                return false;
            }

            return true;
        }
    }
}
